/**
 * api接口管理， 全部以$开头
 * @author terrfly
 * @site https://www.jeequan.com
 * @date 2021/12/17 09:57
 */

import http from './http.js'
import appConfig from '@/config/appConfig.js'
import { Base64 } from 'js-base64'
import infoBox from '@/commons/utils/infoBox.js'

export const req = {
  list: (uri, params) => {
    return http.req(uri, params, 'GET', false)
  },

  add: (uri, data) => {
    return http.req(uri, data, 'POST', false)
  },

  getById: (uri, bizId) => {
    return http.req(`${uri}/${bizId}`, {}, 'GET', false)
  },

  updateById: (uri, bizId, data) => {
    return http.req(`${uri}/${bizId}`, data, 'PUT', false)
  },

  delById: (uri, bizId) => {
    return http.req(`${uri}/${bizId}`, {}, 'DELETE', false)
  },
}

export const reqLoad = {
  list: (uri, params) => {
    return http.req(uri, params, 'GET')
  },

  add: (uri, data) => {
    return http.req(uri, data, 'POST')
  },

  getById: (uri, bizId) => {
    return http.req(`${uri}/${bizId}`, {}, 'GET')
  },

  updateById: (uri, bizId, data) => {
    return http.req(`${uri}/${bizId}`, data, 'PUT')
  },

  delById: (uri, bizId) => {
    return http.req(`${uri}/${bizId}`, {}, 'DELETE')
  },

  // 通用 新增 or 更新
  addOrUpdate: (bizId, url, data, showMessage = true) => {
    //包含bizId 请求的是修改接口
    if (bizId) {
      return reqLoad.updateById(url, bizId, data).then((res) => {
        if (showMessage) {
          return infoBox.showSuccessToast('更新成功').then(() => res)
        }
        return Promise.resolve(res)
      })
    } else {
      return reqLoad.add(url, data).then((res) => {
        if (showMessage) {
          return infoBox.showSuccessToast('新增成功').then(() => res)
        }
        return Promise.resolve(res)
      })
    }
  }
}

/** 上传文件 url  **/
export const API_URL_SINGLE_FILE_UPLOAD = '/api/ossFiles/singleFile'

/** 公告 **/
export const API_URL_SYS_ARTICLES = '/api/sysArticles'

/** 支付订单列表 */
export const API_URL_PAY_ORDER_LIST = '/api/payOrder'

/** 退款订单列表 */
export const API_URL_REFUND_LIST = '/api/refundOrder'

/** 商户应用 */
export const API_URL_MCH_APP_LIST = '/api/mchApps'

/** 门店列表 */
export const API_URL_MCH_STORE_LIST = '/api/mchStore'

/** 通知接收人列表 */
export const API_URL_WXMP_USER_LIST = '/api/wxmp'

/** 进件管理 */
export const API_URL_MCH_APPLYMENT_LIST = '/api/mchApplyments'

/** 员工管理 */
export const API_URL_SYS_USER_LIST = '/api/sysUsers'

/** 码牌管理 */
export const API_URL_SYS_CODE_LIST = '/api/mchQrCodes'

/** 通用设备管理 deviceType  1-喇叭  2-打印机 3-扫码POS 4-智能POS  6-刷脸设备*/
export const API_URL_SYS_DEVICE_LIST = '/api/store/device'

/** 辅助终端管理*/
export const API_URL_SYS_TERMINALS = '/api/mchTerminals'

/** 用户绑定门店列表 */
export const API_URL_USER_BIND_STORE_LIST = '/api/mchStore/userStoreRelas'

/** 商户支付通道列表 */
export const API_URL_PAY_PASSAGE_LIST = '/api/mch/payPassages'
/** 广告列表 */
export const API_URI_PAY_AD_LIST = '/api/advert'
/** 如意门店操作 */ 
export const API_URI_DEV_RUYI = '/api/alipayShop'

/** 会员管理 */ 
export const API_URL_MEMBERS = '/api/member'

/** 会员充值记录 */ 
export const API_URL_MEMBER_RECHARGE_RECORDS = '/api/member/rechargeRecord'

/** 会员充值规则管理 */ 
export const API_URL_MEMBER_RECHARGE_RULES = '/api/member/rechargeRule'

/** 会员账户流水 */ 
export const API_URL_MEMBER_ACCOUNT_HISTORY = '/api/member/accountHistory'

/* 密码登录 */
export function $loginByPwd (username, pwd, safetyCode) {
  // 登录类型
  let lt = ''
  // #ifdef APP-PLUS
  lt = Base64.encode('APP')
  // #endif
  // #ifdef H5 || MP-WEIXIN
  lt = Base64.encode('LITE')
  // #endif

  let data = {
    ia: Base64.encode(username),
    ip: Base64.encode(pwd),
    mc: safetyCode ? Base64.encode(safetyCode) : null,
    lt: lt,
  }
  return http.req('/api/anon/auth/validate', data, 'POST')
}

/* 验证码登录 */
export function $phoneCodeLogin (phone, code) {
  // 登录类型
  let lt = ''
  // #ifdef APP-PLUS
  lt = Base64.encode('APP')
  // #endif
  // #ifdef H5 || MP-WEIXIN
  lt = Base64.encode('LITE')
  // #endif

  let data = {
    phone: Base64.encode(phone),
    code: Base64.encode(code),
    lt: lt,
  }

  return http.req('/api/anon/auth/phoneCode', data, 'POST')
}

// 找回密码
export function $retrieve ({ phone, code, newPwd }) {
  let data = {
    phone: Base64.encode(phone),
    code: Base64.encode(code),
    newPwd: newPwd ? Base64.encode(newPwd) : ''
  }
  return http.req('/api/anon/cipher/retrieve', data, 'POST')
}

/* 修改密码 */
export function $modifyPwd ({ originalPwd, confirmPwd }) {
  let data = {
    originalPwd: Base64.encode(originalPwd),
    confirmPwd: Base64.encode(confirmPwd)
  }
  return http.req("/api/current/modifyPwd", data, "PUT")
}

/* 注册新商户 */
export function $mchRegister ({ mchName, confirmPwd, inviteCode, phone, code }) {
  let data = {
    mchName: mchName, // 商户名称
    confirmPwd: Base64.encode(confirmPwd), // 确认密码
    inviteCode, // 邀请码
    phone: Base64.encode(phone), // 手机号
    code: Base64.encode(code), // 短信验证码
  }
  return http.req('/api/anon/register/mchRegister', data, 'POST')
}

/* 发送短信验证码 */
export function $sendSms (phone, smsType) {
  return http.req('/api/anon/sms/code', { phone, smsType }, 'POST')
}

/* 获取个人信息 */
export function $userInfo (cid1, cid2) {
  return http.req('/api/current/user', { cid1, cid2 }, 'GET')
}

/* 获取公司信息 */
export function $getSiteInfos () {
  return http.req('/api/anon/siteInfos', {}, 'GET')
}

// 隐私政策与服务协议
export function $getTreaty () {
  return http.req('/api/anon/treaty', {}, 'GET')
}

/* 快捷收银 */
export function $appPay (storeId, amount, sellerRemark, wayCode, authCode) {
  let data = { storeId, amount, sellerRemark, wayCode, authCode }

  // 二维码， 返回结果为 图片地址
  if (wayCode == 'QR_CASHIER') {
    data.payDataType = 'codeImgUrl'
  }

  return http.req('/api/pay/app', data, 'POST')
}

/* 当前商户信息 */
export function $getMchInfo () {
  return http.req('/api/mainChart', {}, 'GET')
}

/* 订单打印 */
export function $payOrderPrint (orderId) {
  return http.req('/api/payOrder/print/' + orderId, {}, 'GET')
}

/* 订单退款 */
export function $payOrderRefund (orderId, refundAmount, refundReason, refundPassword) {
  return http.req(
    '/api/payOrder/refunds/' + orderId,
    {
      refundAmount: refundAmount,
      refundReason: refundReason,
      refundPassword: Base64.encode(refundPassword),
    },
    'POST'
  )
}
// 首页统计信息
export function $indexStatistics (queryDateRange) {
  return http.req('/api/mainChart/payDayCount', { queryDateRange }, 'GET')
}
// 统计报表
export function $getStatInfo (data) {
  return http.req('/api/statistic/total', data, 'GET',false)
}
//  统计报表设备 门店 支付方式统计
export function $getStatistic (data) {
  return http.req('/api/statistic', data, 'GET')
}

/* 经纬度转换为areacode */
export function $location2areacode (location) {
  return http.req('/api/mchStore/location2areacode/', { location: location }, 'GET')
}


/* 获取上传form信息 */
export function $ossFilesForm (bizType, file) {
  let postData = {
    bizType: bizType,
    sourceFileName: file.name || file.path, // 如果没有name 则使用pach替换
    sourceFileSize: file.size,
  }

  return http.req('/api/ossFiles/form', postData, 'POST')
}

/* 系统设置 */
// 获取语音播报开关信息
export function $mchConfig (groupKey) {
  return http.req('/api/mchConfig', { groupKey: groupKey }, 'GET')
}
// 修改语音播报开关信息
export function $orderConfig (configData) {
  return http.req('/api/mchConfig/orderConfig', { configData: configData }, 'PUT')
}

/* 修改个人信息 */
export function $modifyUser ({ realname, avatarUrl }) {
  return http.req("/api/current/user", { realname, avatarUrl }, "PUT")
}

/* 获取密码规则 */
export function $getPasswordRules () {
  return http.req("/api/anon/cipher/pwdRulesRegexp", "GET")
}

// 验证是否有密码
export function $isSipw () {
  return http.req("/api/mchConfig/hasSipwValidate", "GET")
}

// 验证原支付密码是否正确
export function $isMchSipw (originalPwd) {
  return http.req("/api/mchConfig/mchSipwValidate", { originalPwd: Base64.encode(originalPwd) }, "POST")
}

/* 更新支付密码 */
export function $updateMchSipw ({ originalPwd, confirmPwd }) {
  let data = {
    originalPwd: Base64.encode(originalPwd),
    confirmPwd: Base64.encode(confirmPwd)
  }
  return http.req("/api/mchConfig/mchSipw", data, "PUT")
}

/* 版本检测 */
export function $versionDetection ({ versionNumber }) {
  return http.req("/api/anon/clientVersion/versionInfo", { versionNumber: versionNumber }, "GET")
}

/* 查询用户权限 */
export function $getUserEntRoles (sysUserId) {
  return http.req("/api/sysUsers/userEntRoles/" + sysUserId, {}, "GET")
}

/* 更新用户权限 */
export function $updateUserEntRoles (sysUserId, ruleName, state) {
  return http.req("/api/sysUsers/userEntRoles/" + sysUserId, { ruleName, state }, "PUT")
}


/*  根据支付方式查询可配置的支付接口  */
export function $getAvailablePayInterface (appId, wayCode) {
  return http.req(`/api/mch/payPassages/availablePayInterface/${appId}/${wayCode}`, "GET")
}

/*  支付方式配置支付接口   */
export function $wayCodeConfigIfCode (appId, wayCode, ifCode) {

  let reqData = {
    appId: appId,
    wayCode: wayCode,
    ifCode: ifCode,
    state: 1
  }
  return http.req(`/api/mch/payPassages/mchPassage`, reqData, "POST")
}
/*码牌扫码 二维码解析*/
export function $parseQrCodeUrl (qrUrl) {
  return http.req('/api/mchQrCodes/parseQrCodeUrl', { qrUrl }, 'GET')
}
/*码牌绑定*/
export function $bindEmptyQR (qrcInfo) {
  return http.req('/api/mchQrCodes/bindEmptyQR', qrcInfo, 'POST')
}
/*解绑码牌*/
export function $unBindQrc (qrcId) {
  return http.req('/api/mchQrCodes/unbind/' + qrcId, {}, 'POST')
}
/*码牌查询受支持的云喇叭设备*/
export function $getHornList (qrcId) {
  return http.req('/api/mchQrCodes/bindDevice/' + qrcId, 'GET')
}
/*  更新默认 */
export function $updateTrmDefault (trmId, defaultFlag) {
  return http.req('/api/mchTerminals/trmDefaults', { trmId, defaultFlag }, 'PUT')
}

/*  设备解绑 */
export function $deviceUnbind (deviceId) {
  return http.req('/api/store/device/unbind/' + deviceId, {}, 'POST')
}


/*  渠道报备列表 */
export function $terminalChannelBindList (trmId) {
  return http.req('/api/mchTerminals/channelBindInfos/' + trmId, {}, 'GET')
}

/*  渠道报备 */
export function $terminalChannelBindSend (trmId, ifCode) {
  return http.req('/api/mchTerminals/channelSendup/' + trmId, { ifCode: ifCode, state: 1 }, 'POST')
}


// 扫码登录
export function $scanCodeLogin (qrcodeNo, qrcodeStatus) {
  return http.req("/api/current/qrcode/login", { qrcodeNo, qrcodeStatus }, "POST")
}

// 云喇叭 播报测试
export function $speakTest (devId, amount) {
  return http.req("/api/store/device/speak/" + devId, amount, "POST")
}

// 云打印 打印测试
export function $printTest (devId, amount) {
  return http.req(`/api/store/device/print/${devId}`, { amount }, "POST")
}

/* 获取百度语音播报token */
export function $getBaiduToken () {
  return http.req("/api/pushinfo/getBaiduToken", {}, "GET")
}
// 获取通知接收人二维码图片
export function $getWxMpInfo () {
  return http.req("/api/wxmp/getWxmpInfo", {}, "GET")
}

/* 获取进件渠道列表 */
export function $getAllAllowApplymentIfCodeList () {
  return http.req("/api/payConfig/ifCodes", {
    infoId: 'CURRENT',
    configMode: 'mchApplyment'
  }, "GET")
}
/* 查询店长可以绑定的门店 */
export function $getBindStoreList (params) {
  return http.req('/api/mchStore/bindStoreList', params, "GET")
}

/* 提交unipush cid */
export function $pushInfoRegister (data) {
  console.log('push cid',data);
  return http.req("/api/pushinfo/register", data, "POST")
}
/* 获取广告接口*/
export function $adList (params) {
  return http.req('/api/advert/appAdvert', params, 'GET')
}
/** 如意Lite 绑定解绑接口 */
export function $BindLite (data) {
  return http.req('/api/alipayIot/bind/'+data.deviceId, data, "POST")
}

// 获取支付宝扫码授权
export function $aliPayQrCodeOrApply (account='', type='queryResult') {
  return http.req(`/api/alipaySpOperation/${type}`, { alipayAccount: account }, type == 'apply' ? 'POST' : 'GET')
}
// 获取支付宝授权信息
export function $aliAccountInfo () {
  return http.req('/api/alipaySpOperation/authInfo', {}, 'GET')
}

// 查询蚂蚁店铺状态
export function $queryAliStore (storeId){
  return req.getById('/api/alipayShop/createResult',storeId)
}


// 获取上传图片 大小
export function $getUploadImgSize(){
  return http.req('/api/defaultConfig',{},"GET")
}

// 会员调账
export function $memberManual(params){
  return http.req('/api/member/manual/'+params.memberId,params,"POST")
}

//查询或修改会员配置信息 
export function $findOrEditMemberConfig (data, mode = 'GET',uri='') {
  return http.req('/api/mchConfig'+uri, data, mode)
}
/* 会员数据统计 */
export function $memberInfoCount (params) {
    return http.req('/api/member/count', params,'GET')
}

/* 查询商户支付应用 费率参数是否配置 */
export function $getMchPayPassage (appId,ifCode) {
    return http.req(`/api/payConfig/existPayParams/${appId}/${ifCode}`, {},'GET')
} 